#ifndef __MACROS_HPP__
#define __MACROS_HPP__

// itera por todo el contenedor
#define foreach(var, container) \
  for(typeof((container).begin()) var = (container).begin(); \
      var != (container).end(); \
      ++var)

// recorre el rango [0,n]
#define forsn(_i,_s,_n) for(uint _i=_s;_i<=_n;_i++)
#define forn(_i,_n) forsn(_i,0,_n)

// recorre el rango [0,n)
#define forsno(_i,_s,_n) for(uint _i=_s;_i<_n;_i++)
#define forno(_i,_n) forsno(_i,0,_n)

// double
#define abs(__x) ((__x)<0.0f?-(__x):(__x))
#define D_ZERO(__x) (abs(__x)<1e-16f)
#define D_EQ(__x,__y) D_ZERO((__x)-(__y))

typedef unsigned int uint;

#endif

